package com.cougil.uoc.seghismed.business;

import java.util.List;
import java.util.Set;

import com.cougil.uoc.seghismed.model.Visita;
import com.cougil.uoc.seghismed.model.ciphed.VisitaCiphed;

/**
 * Interfície que defineix els mètodes amb la lògica vinculada directament amb la gestió de la
 * informació relacionada amb les Visites (ex: grabar, esborrar i cercar Visites i les seves dades
 * relacionades)
 * 
 * @author Ignacio Cougil Jares
 */

public interface VisitaService extends CoreServerService {

	/**
	 * Cerca la visita que tingui l'identificador informat
	 * @param id Identificador del visita que es preten cercar
	 * @return visita {@link Visita} trobada
	 */
	public Visita findById (Integer id);

	/**
	 * Retorna la visita xifrada que representa la visita informada
	 *
	 * @param visitesXifrades
	 *            {@link List} llista de visites xifrades sobre les que cercar la visita informada
	 * @param visita
	 *            {@link Visita} visita a cercar
	 * @return visita xifrada {@link VisitaCiphed} trobada o null en cas contrari
	 */
	public VisitaCiphed findVisitaCiphed(List<VisitaCiphed> visitesXifrades, Visita visita);

	/**
	 * Retorna la visita xifrada que representa la visita informada si aquesta es troba dintre de la
	 * llista informada
	 *
	 * @param visitesCiphed
	 *            {@link Set} conjunt de visites xifrades sobre el que es vol cercar la visita
	 * @param visita
	 *            {@link Visita} visita a cercar
	 * @return visita xifrada {@link VisitaCiphed} trobada o null en cas contrari
	 */
	public VisitaCiphed findVisitaCiphed(Set<VisitaCiphed> visitesCiphed, Visita visita);

	/**
	 * Retorna la visita xifrada associada a la visita
	 *
	 * @param visita
	 *            {@link VisitaCiphed} de la que es preten cercar la seva visita xifrada
	 * @return visita xifrada trobada {@link VisitaCiphed} o null en cas contrari
	 */

	public VisitaCiphed findVisitaCiphed(Visita visita);

	/**
	 * Retorna la llista de totes les visites disponibles en el sistema
	 * @return {@link List} llista amb el conjunt d'elements trobats
	 */
	public List<Visita> findVisites();

	/**
	 * Retorna la llista amb tots els metges xifrats disponibles en el sistema
	 * @return {@link List} llista amb el conjunt d'elements trobats
	 */
	public List<VisitaCiphed> findVisitesCiphed();

	/**
	 * Esborra un visita informada per paràmetre
	 * @param id Identificador de la visita que es preten esborrar
	 */
	public void remove(Integer id);

	/**
	 * Esborra totes les visites xifrades informades per paràmetre i les seves homòlogues
	 * desxifrades
	 *
	 * @param visitesProtegides
	 *            {@link Set} conjunt de visites xifrades a eliminar
	 */
	public void remove(Set<VisitaCiphed> visitesProtegides);

	/**
	 * Esborra totes les visites existents en el sistema
	 *
	 * @return nombre de visites esborrades
	 */
	public int removeAll();

	/**
	 * Emmagatzema una Visita informada per paràmetre
	 * @param visita {@link Visita} que es preten guardar
	 */
	public void save(Visita visita);

	/**
	 * Retorna el nombre de visites disponibles en el sistema
	 *
	 * @return el nombre d'elements trobats
	 */
	public long totalVisites();

	/**
	 * Retorna el nombre de visites xifrades disponibles en el sistema
	 *
	 * @return el nombre d'elements trobats
	 */
	public long totalVisitesCiphed();
}






